package fr.upmc.cie.data.interfaces;

import java.util.ArrayList;

import fr.upmc.cie.data.CategorieItem;
import fr.upmc.cie.data.ChannelItem;
import fr.upmc.cie.data.exception.ChannelNotExistException;
import fr.upmc.cie.data.exception.ChannelTitleDuplicateException;

public interface IChannelDataSource {

	/**
	 * Ajouter un nouveau flux
	 * @param ci
	 * @throws ChannelTitleDuplicateException
	 */
	public void insert(ChannelItem ci) throws ChannelTitleDuplicateException;
	
	/**
	 * Supprimer un flux
	 * @param ci
	 * @throws ChannelNotExistException
	 */
	public void delete(ChannelItem ci) throws ChannelNotExistException;
	
	/**
	 * Mettre a jour un flux
	 * @param ci
	 * @throws ChannelTitleDuplicateException
	 * @throws ChannelNotExistException
	 */
	public void update(ChannelItem ci) throws ChannelTitleDuplicateException,ChannelNotExistException;
	
	/**
	 * Revoie tous les flux
	 * @return
	 */
	public ArrayList<ChannelItem> getAllChannel();

	/**
	 * Renvoie un flux a partir de son id
	 * @param id
	 * @return
	 * @throws ChannelNotExistException
	 */
	public ChannelItem getChannelById(Long id) throws ChannelNotExistException;
	
	/**
	 * Renvoie un flux a partir de son nom 
	 * @param name
	 * @return
	 * @throws ChannelNotExistException
	 */
	public ChannelItem getChannelByName(String name) throws ChannelNotExistException;
	
	/**
	 * Parametrer la categorie d'un flux
	 * @param ci
	 * @param cti
	 */
	public void setChannelCategorie(ChannelItem ci, CategorieItem cti);

	public long getChannelCategorieId(ChannelItem c);
	
	
		
}
